package de.herzog.bbp.files;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import de.herzog.bbp.model.Klasse;
import de.herzog.bbp.model.Mannschaft;
import de.herzog.bbp.model.Spiel;
import de.herzog.bbp.model.dao.KlasseDAO;
import de.herzog.bbp.model.dao.SpielDAO;
import de.herzog.bbp.view.bean.SpielBean;

public class ExportTeamware {

    private static final Logger LOG = LoggerFactory.getLogger(ExportTeamware.class);

    private static final String SEP = "\t";
    private static final String EOL = "\r\n";

    public static void export(String parentFolderName) throws IOException {
        LOG.info("Starting export...");
        String folderName = parentFolderName + "/teamware";
        createFolder(folderName);
        for (Klasse klasse : KlasseDAO.loadAll()) {
            LOG.debug("Klasse " + klasse);
            exportSpiele(klasse, folderName + "/Spiele-" + klasse.getName() + ".txt");
            exportMannschaften(klasse, folderName + "/Mannschaften-" + klasse.getName() + ".txt");
        }
        exportMannschaftenKomplett(folderName + "/Mannschaften.txt");
        LOG.info("End export.");
    }

    private static void createFolder(String folderName) throws IOException {
        FileArchiver.deleteFolderRecursively(folderName);
        new File(folderName).mkdir();
    }

    private static void exportSpiele(Klasse klasse, String fileName) throws IOException {
        FileWriter writer = new FileWriter(fileName);
        for (Spiel spiel : SpielDAO.loadByKlasse(klasse)) {
            exportSpiel(writer, spiel);
        }
        writer.close();
    }

    private static void exportSpiel(FileWriter writer, Spiel spiel) throws IOException {
        SpielBean spielBean = new SpielBean(spiel);
        String spieltag = "1";
        writer.write(spieltag);
        writer.write(SEP);
        writer.write(Integer.toString(spielBean.getNummer()));
        writer.write(SEP);
        writer.write(spielBean.getDatumString());
        writer.write(SEP);
        writer.write(spielBean.getZeit());
        writer.write(SEP);
        writer.write(spielBean.getHeimVerein());
        writer.write(Integer.toString(spielBean.getHeimNummer()));
        writer.write(SEP);
        writer.write(spielBean.getGastVerein());
        writer.write(Integer.toString(spielBean.getGastNummer()));
        writer.write(SEP);
        writer.write("F-");
        writer.write(spielBean.getHeimVerein());
        writer.write(Integer.toString(spielBean.getHalleNummer()));
        writer.write(EOL);
    }

    private static void exportMannschaften(Klasse klasse, String fileName) throws IOException {
        FileWriter writer = new FileWriter(fileName);
        for (Mannschaft mannschaft : klasse.getMannschaften()) {
            exportMannschaft(writer, mannschaft);
        }
        writer.close();
    }

    private static void exportMannschaft(FileWriter writer, Mannschaft mannschaft) throws IOException {
        writer.write(mannschaft.getVerein().getLangName());
        if (mannschaft.getNummer() > 1) {
            writer.write(" ");
            writer.write(String.valueOf(mannschaft.getNummer()));
        }
        writer.write(SEP);
        writer.write(mannschaft.getVerein().getName());
        writer.write(String.valueOf(mannschaft.getNummer()));
        writer.write(SEP);
        writer.write(mannschaft.getVerein().getNummer());
        writer.write(SEP);
        writer.write(String.valueOf(mannschaft.getNummer()));
        writer.write(SEP);
        writer.write("F-");
        writer.write(mannschaft.getVerein().getName());
        writer.write("1");
        writer.write(EOL);
    }

    private static void exportMannschaftenKomplett(String fileName) throws IOException {
        FileWriter writer = new FileWriter(fileName);
        for (Klasse klasse : KlasseDAO.loadAll()) {
            for (Mannschaft mannschaft : klasse.getMannschaften()) {
                writer.write(klasse.getName());
                writer.write(SEP);
                exportMannschaft(writer, mannschaft);
            }
        }
        writer.close();
    }
}
